中秋節快樂! 中秋節依舊趕稿中,不過已經第 24 天了!
今天要做的是 JS 30 第十三天的照片移入移出效果製作。當視窗移到照片的區域以動畫方式出現。
捲軸是不斷觸發的事件,所以比較耗能,我們可以用 debounce 來把捲軸觸發事件降低
因為捲軸是在瀏覽器上,所以我們監聽事件要做在瀏覽器上。
window.addEventListener('scroll',debounce(scrollHandler,100))
所以 window.scrollY + window.innerHeight 等於滑動時的下緣
let images = document.querySelectorAll('img')
function scrollHandler(){
let windowTop = window.scrollY
let windowBottom = windowTop + window.innerHeight
images.forEach(img=>{
if (img.offsetTop + img.height /2 < windowBottom){
img.classList.add('active')
}
})
}
這個是 WesBos 給的 debounce 方法。
function debounce(func, wait = 20, immediate = true) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
// 每次進來會重新計算時間,然後會清掉
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
以上,明天見